package tp.pr5.mv;

import tp.pr5.mv.inout.InMethod;
import tp.pr5.mv.inout.OutMethod;
import tp.pr5.mv.traps.MVTrap;



public abstract class Instruction { // Clase abstracta Instruction
	

	
	public Opcode getOpcode()  // Método que nos devuelve el opcode de una instrucción
	{
		return this.op;
	}

	
	public String toString() { // Método que imprime por pantalla una instrucción (por defecto sin parámetros)
		
	    return getOpcode().toString(); 
	}
	
	
	public abstract void execute ( OperandStack stack, Memory mem, ProgramCounter pc, InMethod inMethod , OutMethod outMethod ) throws MVTrap; // Método abstracto que implementan las diversas instrucciones
	
    public Instruction parse( String mnemo, String param ) {      // En la clase Instruction se encuentra el parse por defecto (sin parámetros).
    	
    	if ( !param.equals("") ) // Devolvemos null si se hubiera introducido un parámetro o el mnemo no fuera un String
	    	return null;
	    if ( !mnemo.equals( op.toString() ) )       	
            return null;
	    
	    return this;
	    	
    }
    
    protected Opcode op; // El atributo op está protegido para que las clases derivadas puedan utilizarlo
}
